﻿/**
 *    Copyright 2006 - 2011 Opera Software ASA
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 *
 **/


/**
 * The message broker is a singleton used for loosely coupled communication
 * between bits of code. The message broker is a singleton, anywhere a
 * message broker instance is used it is guaranteed to be the One True
 * Message Broker that is shared globally. The message broker supports
 * subscribing to messages and posting message. There is no requirement
 * to pre-register what kinds of messages can be sent. A message is
 * simply a (name, payload) tuple.
 *
 *
 * @requires MessageMixin
 */

window.cls || ( window.cls = {} );

cls.MessageBroker = function() {
   // message broker is a singleton
   if(cls.MessageBroker.instance)
   {
     return cls.MessageBroker.instance;
   }
   cls.MessageBroker.instance = this;

   cls.MessageMixin.apply(this); // mixin happens here.
   // At this point message broker instance has addListener and post
};
cls.MessageBroker.getInstance = function() { return new MessageBroker(); };
